package demo01.initAndClinit;

/**
 * <clinit>方法是在类加载过程中执行的，而<init>是在对象实例化执行的，所以<clinit>一定比<init>先执行。所以整个顺序就是：
 * 1. 父类静态变量初始化、静态语句块（经验证：按代码先后顺序执行）
 * 2. 子类静态变量初始化、静态语句块（先后顺序执行）
 * 3. 父类变量初始化、普通语句块（先后顺序执行）
 * 4. 父类构造函数
 * 5. 子类变量初始化、普通语句块（先后顺序执行）
 * 6. 子类构造函数
 */
public class Sub extends Parent {
    private String subA;
    private static String subStaticB;
    Sub(){
        System.out.println("Sub()");
        System.out.println("========sub构造函数========");
    }

    {
        System.out.println("========sub实体构造器start========");
        System.out.println("========sub实体构造器end========\n");
    }

    static {
        System.out.println("========sub类构造器start========");
        System.out.println("========sub类构造器end========\n");
    }

    public static void main(String[] args) {
        Sub a = new Sub();
        Parent ab = new Sub();
        Parent p = new Parent();
        String p1 = p.p;
    }
}

